import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
// 返回的结果就是axios实例
const request = axios.create({
  // 基地址：每个接口都包含的地址
  // 作用：每次请求都会跟基地址进行拼接
  baseURL: 'http://interview-api-t.itheima.net/',
  // 毫秒为单位10s,超过10s中之后 默认这次请求，失败
  timeout: 10000
})

// 添加请求拦截器
// 执行时机：请求发起之后，到达服务器之前 都会执行请求拦截
request.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 1.先获取token
  const token = store.state.user.token
  // 2.携带token
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
// 执行时机：接口响应之后 第一个执行的就是响应拦截
request.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  // 第一个回调函数执行时机：响应的http状态为2xx都会执行
  // console.log('response', response)
  return response.data
}, function (error) {
  // 对响应错误做点什么
  // 第二个回调函数执行时机：响应状态码为3xx-5xx
  // console.log(error)
  if (error.response.status === 401) {
    // token过期了
    // 1.清空token(vuex、localStorage)
    store.commit('user/removeToken')
    // 2.跳转到登录
    router.push('/login')
  }
  Message.error(error.response.data.message)
  return Promise.reject(error)
})

// 最后 导出
export default request
